Skip to main content
PUT
/
menus
/
products
/
{id}
Update product
curl --request PUT \
  --url https://api.example.com/menus/products/{id}
Updates a single product within a composed menu. Use this endpoint when your POS or RMS pushes item-level changes — pricing, availability, or channel-specific overrides — into an existing menu without replacing the entire menu payload.
Requires an access token with the menus:write scope. See Authorize to obtain a token.

Path parameters

ParameterDescription
idExternal product identifier. Alphanumeric characters, _, and - only. 1–64 characters.

Request

curl -X PUT "https://firespark.vercel.app/api/integrations/v1/menus/products/burger-classic" \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Classic burger",
    "description": "Angus beef patty with lettuce and tomato.",
    "image_url": "https://cdn.example.com/burger-classic.jpg",
    "channels": {
      "APP": {
        "id": "app",
        "uid": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "name": "Mobile app",
        "stores": {
          "downtown": {
            "id": "downtown",
            "uid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
            "name": "Downtown",
            "fulfillment": {
              "DELIVERY": {
                "uid": "d4e5f6a7-b8c9-0123-def4-567890abcdef",
                "id": "delivery",
                "type": "DELIVERY",
                "name": "Delivery",
                "pricing": {
                  "minimum_quantity": 1,
                  "maximum_quantity": 10
                },
                "availability": {
                  "status": "AVAILABLE",
                  "schedules": [{
                    "monday": { "start_time": "11:00:00", "end_time": "22:00:00" }
                  }],
                  "out_of_stock_until": null
                }
              }
            }
          }
        }
      }
    },
    "overrides": [],
    "status": "ACTIVE"
  }'

Product object

FieldTypeDescription
namestringDisplay name. 1–100 characters.
descriptionstringOptional description. Up to 500 characters.
image_urlstringProduct image URL.
channelsobjectPer-channel, per-store, per-fulfillment pricing and availability.
overridesarrayScheduled product changes.
statusstringACTIVE or INACTIVE.
Map of channel codes to channel configuration. Each entry contains id, uid, name, and a stores map.Each store entry contains id, uid, name, and a fulfillment map keyed by fulfillment type code.Each fulfillment entry requires:
FieldTypeDescription
uidstring (UUID)Fire spark fulfillment identifier.
idstringExternal fulfillment identifier.
typestringFulfillment type code (for example DELIVERY, PICKUP).
namestringDisplay name.
pricingobjectContains minimum_quantity and maximum_quantity.
availabilityobjectContains schedules (null when there is no schedule restriction), optional out_of_stock_until, and status (AVAILABLE, UNAVAILABLE, or OUT_OF_STOCK).

Response

Returns the updated product object in data.

Error responses

StatusDescription
400Validation error.
401Missing or invalid access token.
403Token does not include the menus:write scope.
404No product with this id exists in the menu.